1
תגובות

מערכת ניהול תוכן

פתח mirim ,
שלום וברכה!
קיימת בעיה שהקישור לא מוביל לדף לפי הid, אלא עובר לדף show.php וכותב הערה: ( ! ) Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\new\show.php on line 45.
אשמח לעזרתכם!
ותודה על המדריכים הנהדרים
if(isset($_GET['id'])){

  $mysqli = new mysqli('localhost', 'root', '', 'biznees') or die('vvvvvvvvvv');
  $mysqli->query("SET NAMES 'utf8'");
  $pageResource = $mysqli->query("SELECT name,address FROM `info` WHERE `id`=".$_GET['id']);
 
  if( mysqli_num_rows($pageResource) != 1)
  {
  echo 'העמוד לא נמצא';
  }
  else
  {
// הכנסת הנתונים מהמסד למערך
    $page = mysqli_fetch_assoc($pageResource);
   
//בדיקה שהעמוד נמצא במסד. (יכול להיות שאין עמוד כזה בכלל)

// הדפסת הנתונים למשתמש
    echo $page['name'];

 
  //-run  the query against the mysql query function
   

   
  echo"<section class=titel_esek>" .$page['name']."</section>";//<!--titel_esek-->
  echo"<section class=titel_esek2><h2> פרטי העסק</h2></section>";//<!--titel_esek2-->
  echo"<section class=teur_esek>כתובת:" .$page['address']."</section>";//<!--teur_esek-->
  echo"<section class=teur_esek>טלפון:</section>";//<!--teur_esek-->
  echo"<section class=teur_esek>טלפון נוסף:</section>";//<!--teur_esek-->
  echo"<section class=open_esek> שעות פתיחה :</section>";//<!--open_esek-->
 echo" <br />";

 echo" <section class=titel_esek2><h2>מפת הגעה</h2></section>";//<!--titel_esek2-->
 }
 }
else
{
  echo 'העמוד המבוקש לא קיים';
}

הקישור נכתב כך:
<a href='show.php?id=x'>".$row["id"]."</div></a>

1 תשובות

avatar ענה intval ב 24 לאוגוסט 2015 #

בעיקרון יש שני דברים שצריך לעשות כשמשהו לא עובד שיחסכו לך הרבה זמן:
א. לבדוק האם המשתנים מכילים מה שאתה חושבת והקישורים נראים כמו מה שאת חושבת
ב. לקרוא את טקסט השגיאה. למשל:


בטקסט השגיאה כתוב
expects parameter 1 to be mysqli_result, boolean given
מה שאומה שהמשתנה pageResource היה מסוג boolean ולא מסוג תוצאת שאילתה.

לפי הדוקומנטציה הפקודה mysqli->query מחזירה או תוצאת שאילתה או false אם השאילתה נכשלה מכל סיבה שהיא

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.


מזה נובע שאו שהשאילתה נכשלה או שזו לא הייתה שאילתת שליפה.
מכאן צריך לבדוק למה השאילתה נכשלה. את זה אפשר לעשות באמצעות הדפסת המאפיין
$mysqli->error

(הועתק מאותו עמוד בדוקומנטציה שקושר)

ובכל אופן, הסיבה שזה קורא היא שהשאילתה לא נכונה. השאילתה שהמסד מקבל מהקוד שלך היא:
SELECT name,address FROM `info` WHERE `id`=x

שימי לב לאות X במקום מספר. היא מגיעה מהקישור (שימי לב טוב לקישור) שלא מכיל מספר עמוד אלא את האות X

היות ש-mysql מצפה שמחרוזות יופיעו תמיד בתוך גרשיים השאילתה אמורה להיות
where `id` = 'x'

אם כי עדיף לתקן את הקישור.



מסכנות:
א. לא מספיק לבדוק באמצעות mysql_num_rows, צריך גם לבדוק שהתוצאה איננה false
ב. יש איפשהו באתר מדריך על sql injection שחובה לקרוא.